#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
	int fd = open("log.txt", O_RDONLY);
	
	dup2(fd, 0);

	char buffer[1024];
	size_t r = read(0, buffer, sizeof(buffer));
	if (r > 0)
	{
		buffer[r] = 0;
		printf("stdin redir: \n%s\n", buffer);
	}
	//int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);

	//intdup2(fd, 1);

	//intprintf("printf fd : %d\n", fd);
	//intfprintf(stdout, "fprintf fd : %d\n", fd);
	//intfputs("fputs fd\n", stdout);
	//intconst char *str = "fwrite fd\n";
	//intfwrite(str, 1, strlen(str), stdout);


   	//close(1);
	//int fd1 = open("log1.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);
	//int fd2 = open("log2.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);
	//int fd3 = open("log3.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);
	//int fd4 = open("log4.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);

	//printf("fd1 : %d\n", fd1);
	//printf("fd2 : %d\n", fd2);
	//printf("fd3 : %d\n", fd3);
	//printf("fd4 : %d\n", fd4);

	//fflush(stdout);

	//close(fd1);
	//close(fd2);
	//close(fd3);
	//close(fd4);

	//int n = 1234;
	//char str[128];
	//snprintf(str, sizeof(str), "%d", n);
	//write(1, str, strlen(str));

//	printf("stdin : %d\n", stdin->_fileno);
//	printf("stdout : %d\n", stdout->_fileno);
//	printf("stderr : %d\n", stderr->_fileno);
//
//	FILE *pf = fopen("log.txt", "w");o
//	printf("pf : %d\n", pf->_fileno);

//	char buffer[100];
//	ssize_t s = read(0, buffer, sizeof(buffer));
//	if (s > 0) //实际读到的字节大小
//	{
//		buffer[s - 1] = 0;
//		printf("%s\n", buffer);
//	}
//
//	const char *str = "Are you ok?\n";
//	ssize_t w = write(1, str, strlen(str)); 
	return 0;
}

//int main()
//{
//	int fd1 = open("log.txt1", O_CREAT | O_WRONLY, 0666);
//	int fd2 = open("log.txt2", O_CREAT | O_WRONLY, 0666);
//	int fd3 = open("log.txt3", O_CREAT | O_WRONLY, 0666);
//
//	printf("fd1 : %d\n", fd1);
//	printf("fd2 : %d\n", fd2);
//	printf("fd3 : %d\n", fd3);
//
//	close(fd1);
//	close(fd2);
//	close(fd3);
//
//    return 0;
//}

//#define ONE (1<<0)
//#define TWO (1<<1)
//#define THREE (1<<2)
//#define FOUR (1<<3)
//#define FIVE (1<<4)
//
//void test(int flags)
//{
//	if (flags & ONE)
//	{
//		printf("one\n");
//	}
//    if (flags & TWO)
//	{
//		printf("two\n");
//	}
//	if (flags & THREE)
//	{
//		printf("three\n");
//	}
//	if (flags & FOUR)
//	{
//		printf("four\n");
//	}
//	if (flags & FIVE)
//	{
//		printf("five\n");
//	}
//}
//
//int main()
//{
//	test(ONE);
//	printf("////////////\n");
//	test(ONE | TWO);
//	printf("////////////\n");
//	test(ONE | TWO | THREE);
//	printf("////////////\n");
//	test(ONE | TWO | THREE | FOUR);
//	printf("////////////\n");
//	test(ONE | TWO | THREE | FOUR | FIVE);
//	printf("////////////\n");
//	return 0;
//}
